"use client"; import Sidebar from "@/components/Layout/Sidebar"; import Loading from "@/components/Loading"; import { useSystemStore } from "@/stores/useSystemStore"; import { setHtmlFontSize } from "@/utils"; import { ConfigProvider, Dialog } from "antd-mobile"; import enUS from "antd-mobile/es/locales/en-US"; import { useLocale } from "next-intl"; import { ThemeProviderProps } from "next-themes/dist/types"; import { ReactNode, useLayoutEffect, useRef } from "react"; import { Swiper, SwiperClass, SwiperSlide } from "swiper/react"; import { useDebounceEffect } from "ahooks"; import { initializeApp } from "firebase/app"; import { getMessaging, getToken, onMessage } from "firebase/messaging"; export interface ProvidersProps { children: ReactNode; themeProps?: Omit; } const initFirebase = () => { // 是否是https if (document.location.protocol.indexOf("https") === -1) return; // 浏览器是否支持 且是 pwa if (!window.Notification) { Dialog.alert({ getContainer: null, bodyStyle: { background: "#fff" }, title: "提示", confirmText: "我知道了", content: ( <>

当前版本浏览器不支持通知

请更换或升级浏览器获得更好使用体验

), }); return; } // 是否开启通知 // new Notification("这是标题", { // body: "这是正文", // icon: "https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png", // requireInteraction: true, // image: "https://gw.alipayobjects.com/zos/rmsportal/JiqGstEfoWAOHiTxclqi.png", // }); if (Notification.permission === "default") { // 征求用户的许可 Notification.requestPermission(); } if (Notification.permission === "denied") return; const app = initializeApp({ apiKey: process.env.NEXT_PUBLIC_FIREBASE_APIKEY, authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTHDOMAIN, projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECTID, storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGEBUCKET, messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGINGSENDERID, appId: process.env.NEXT_PUBLIC_FIREBASE_APPID, measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENTID, }); const messaging = getMessaging(app); // 针对单机测试,或者服务端需要使用这个key可以放开 // if (process.env.NODE_ENV === "development") { getToken(messaging, { vapidKey: process.env.NEXT_PUBLIC_FIREBASE_KEYS, }).then((res) => { console.log(`🚀🚀🚀🚀🚀-> `, res); }); // } onMessage(messaging, (payload) => { const notifica = new Notification(payload.data?.title || "", { body: payload.data?.body, icon: payload.data?.image, ...payload.data, }); }); }; const Layout = ({ children, themeProps }: ProvidersProps) => { const { isCollapse, setCollapse } = useSystemStore((state) => ({ isCollapse: state.isCollapse, setCollapse: state.setCollapse, })); const local = useLocale(); const swiperRef = useRef(); const homeContainerRef = useRef(null); const startHandler = () => { homeContainerRef.current?.classList.add("containerMask"); setCollapse(true); }; const endHandler = () => { homeContainerRef.current?.classList.remove("containerMask"); setCollapse(false); }; useLayoutEffect(() => { // 调用响应式方法 setHtmlFontSize(); }, []); return (
{ swiperRef.current = swiper; }} allowTouchMove={false} >
{}
{children}
); }; export const Providers = ({ children, themeProps }: ProvidersProps) => { useDebounceEffect(() => { if ("serviceWorker" in navigator) { initFirebase(); } }, []); return ( {children} ); };